﻿using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Collections;

namespace Sinacor.Infra.Common
{
    /// <summary>
    /// Classe base para tradutores de objetos
    /// </summary>
    /// <typeparam name="TTo">Type do objeto de destino</typeparam>
    /// <typeparam name="TFrom">Type do objeto de origem</typeparam>
    /// <typeparam name="TListTo">Type da lista de objetos de destino</typeparam>
    /// <typeparam name="TListFrom">Type da lista de objetos de origem</typeparam>
    public class ListTranslator<TTo, TFrom, TListTo, TListFrom> : Translator<TTo, TFrom>
        where TTo : new()
        where TFrom : new()
        where TListTo : IList<TTo>, new()
        where TListFrom : IList<TFrom>, new()
    {
        /// <summary>
        /// Traduz uma lista de objetos de origem para uma lista de objetos de destino
        /// </summary>
        /// <param name="from">Objetos de origem</param>
        /// <returns>Objetos de destino</returns>
        public TListTo TranslateToList(TListFrom from)
        {
            TListTo to = default(TListTo);
            if (from != null)
            {
                to = new TListTo();
                foreach (TFrom item in from)
                {
                    to.Add(Translate(item));
                }
            }
            return to;
        }
    }
}
